﻿using System;
using System.Web;
using System.Text.RegularExpressions;
using System.Configuration;

namespace OF.Utility
{
    public class SiteInfo
    {

            /// <summary>
            /// 判断当前页面是否接收到了Post请求
            /// </summary>
            /// <returns>是否接收到了Post请求</returns>
            public static bool IsPost()
            {
                return HttpContext.Current.Request.HttpMethod.Equals("POST");
            }
            /// <summary>
            /// 判断当前页面是否接收到了Get请求
            /// </summary>
            /// <returns>是否接收到了Get请求</returns>
            public static bool IsGet()
            {
                return HttpContext.Current.Request.HttpMethod.Equals("GET");
            }

            /// <summary>
            /// 返回指定的服务器变量信息
            /// </summary>
            /// <param name="strName">服务器变量名</param>
            /// <returns>服务器变量信息</returns>
            public static string GetServerString(string strName)
            {
                //
                if (HttpContext.Current.Request.ServerVariables[strName] == null)
                {
                    return "";
                }
                return HttpContext.Current.Request.ServerVariables[strName].ToString();
            }

            /// <summary>
            /// 返回上一个页面的地址
            /// </summary>
            /// <returns>上一个页面的地址</returns>
            public static string GetUrlReferrer()
            {
                string retVal = null;
                try
                {
                    retVal = HttpContext.Current.Request.UrlReferrer.ToString();
                }
                catch { }

                if (retVal == null)
                    return "";
                return retVal;
            }

            /// <summary>
            /// 得到当前完整主机头
            /// </summary>
            /// <returns></returns>
            public static string GetCurrentFullHost()
            {
                HttpRequest request = System.Web.HttpContext.Current.Request;
                if (!request.Url.IsDefaultPort)
                {
                    return string.Format("{0}:{1}", request.Url.Host, request.Url.Port.ToString());
                }
                return request.Url.Host;
            }

            /// <summary>
            /// 得到主机头
            /// </summary>
            /// <returns></returns>
            public static string GetHost()
            {
                return HttpContext.Current.Request.Url.Host;
            }


            /// <summary>
            /// 获取当前请求的原始 URL(URL 中域信息之后的部分,包括查询字符串(如果存在))
            /// </summary>
            /// <returns>原始 URL</returns>
            public static string GetRawUrl()
            {
                return HttpContext.Current.Request.RawUrl;
            }
            /// <summary>
            /// 得到根目录的URL地址
            /// </summary>
            public static string GetBaseURL()
            {
                string strPort = HttpContext.Current.Request.Url.Port == 80 ?
                    "" : ":" + HttpContext.Current.Request.Url.Port.ToString();
                if (HttpContext.Current.Request.ApplicationPath == "/")
                {
                    return @"http://" + HttpContext.Current.Request.Url.Host + strPort;
                }
                else
                {
                    return @"http://" + HttpContext.Current.Request.Url.Host + strPort + HttpContext.Current.Request.ApplicationPath;
                }
            }
            /// <summary>
            /// 判断当前访问是否来自浏览器软件
            /// </summary>
            /// <returns>当前访问是否来自浏览器软件</returns>
            public static bool IsBrowserGet()
            {
                string[] BrowserName = { "ie", "opera", "netscape", "mozilla", "konqueror", "firefox" };
                string curBrowser = HttpContext.Current.Request.Browser.Type.ToLower();
                for (int i = 0; i < BrowserName.Length; i++)
                {
                    if (curBrowser.IndexOf(BrowserName[i]) >= 0)
                    {
                        return true;
                    }
                }
                return false;
            }

            /// <summary>
            /// 判断是否来自搜索引擎链接
            /// </summary>
            /// <returns>是否来自搜索引擎链接</returns>
            public static bool IsSearchEnginesGet()
            {
                if (HttpContext.Current.Request.UrlReferrer == null)
                {
                    return false;
                }
                string[] SearchEngine = { "google", "yahoo", "msn", "baidu", "sogou", "sohu", "sina", "163", "lycos", "tom", "yisou", "iask", "soso", "gougou", "zhongsou" };
                string tmpReferrer = HttpContext.Current.Request.UrlReferrer.ToString().ToLower();
                for (int i = 0; i < SearchEngine.Length; i++)
                {
                    if (tmpReferrer.IndexOf(SearchEngine[i]) >= 0)
                    {
                        return true;
                    }
                }
                return false;
            }
            /// <summary>
            /// 判断是否来自搜索引擎链接
            /// </summary>
            /// <returns>是否来自搜索引擎链接</returns>
            public static bool IsSearchEnginesGet(string url)
            {
                if (string.IsNullOrEmpty(url))
                {
                    return false;
                }
                string[] SearchEngine = { "google", "yahoo", "msn", "baidu", "sogou", "sohu", "sina", "163", "lycos", "tom", "yisou", "iask", "soso", "gougou", "zhongsou" };
                string tmpReferrer = HttpContext.Current.Request.UrlReferrer.ToString().ToLower();
                for (int i = 0; i < SearchEngine.Length; i++)
                {
                    if (tmpReferrer.IndexOf(SearchEngine[i]) >= 0)
                    {
                        return true;
                    }
                }
                return false;
            }
            /// <summary>
            /// 获得当前完整Url地址
            /// </summary>
            /// <returns>当前完整Url地址</returns>
            public static string GetUrl()
            {
                return HttpContext.Current.Request.Url.ToString();
            }


            /// <summary>
            /// 获得指定Url参数的值
            /// </summary>
            /// <param name="strName">Url参数</param>
            /// <returns>Url参数的值</returns>
            public static string GetQueryString(string strName)
            {
                if (HttpContext.Current.Request.QueryString[strName] == null)
                {
                    return "";
                }
                return HttpContext.Current.Request.QueryString[strName];
            }

            /// <summary>
            /// 获得当前页面的名称
            /// </summary>
            /// <returns>当前页面的名称</returns>
            public static string GetPageName()
            {
                //string[] urlArr = HttpContext.Current.Request.Url.AbsolutePath.Split('/');
                string[] urlArr = HttpContext.Current.Request.RawUrl.Split('/');
                string[] urlArrTmp = urlArr[urlArr.Length - 1].ToLower().Split('?');
                return urlArrTmp[0] == "" ? "index.html" : urlArrTmp[0];
            }
            /// <summary>
            /// 获得当前页面的名称
            /// </summary>
            /// <returns>当前页面的名称</returns>
            public static string GetPageName(string defaultPage)
            {
                //string[] urlArr = HttpContext.Current.Request.Url.AbsolutePath.Split('/');
                string[] urlArr = HttpContext.Current.Request.RawUrl.Split('/');
                string[] urlArrTmp = urlArr[urlArr.Length - 1].ToLower().Split('?');
                return urlArrTmp[0] == "" ? defaultPage : urlArrTmp[0];
            }
            /// <summary>
            /// 返回表单或Url参数的总个数
            /// </summary>
            /// <returns></returns>
            public static int GetParamCount()
            {
                return HttpContext.Current.Request.Form.Count + HttpContext.Current.Request.QueryString.Count;
            }
            /// <summary>
            /// 获取当前请求的原始 URL(URL 中域信息之后的部分,包括查询字符串(如果存在))
            /// </summary>
            /// <returns>原始 URL</returns>
            public static void SetRedirectUrl(string URL)
            {
                HttpContext.Current.Response.Redirect(URL);
            }

            /// <summary>
            /// 获得指定表单参数的值
            /// </summary>
            /// <param name="strName">表单参数</param>
            /// <returns>表单参数的值</returns>
            public static string GetFormString(string strName)
            {
                if (HttpContext.Current.Request.Form[strName] == null)
                {
                    return "";
                }
                return HttpContext.Current.Request.Form[strName];
            }



            /// <summary>
            /// 保存用户上传的文件
            /// </summary>
            /// <param name="path">保存路径</param>
            public static void SaveRequestFile(string path)
            {
                if (HttpContext.Current.Request.Files.Count > 0)
                {
                    HttpContext.Current.Request.Files[0].SaveAs(path);
                }
            }
            /// <summary>
            /// 获得当前页面客户端的IP
            /// </summary>
            /// <returns>当前页面客户端的IP</returns>
            public static string GetIP()
            {
                string result = String.Empty;
                result = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
                if (string.IsNullOrEmpty(result))
                {
                    result = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
                }

                if (string.IsNullOrEmpty(result))
                {
                    result = HttpContext.Current.Request.UserHostAddress;
                }
                if (string.IsNullOrEmpty(result) )
                {
                    return "127.0.0.1";
                }
                return result;

            }
            /// <summary>
            /// 手机访问
            /// </summary>
            /// <returns>0:PC访问 1:手机访问</returns>
            public static int GetBroswer()
            {
                int flg = 0;
                string osPat = "mozilla|m3gate|winwap|openwave|Windows NT|Windows 3.1|95|Blackcomb|98|ME|X Window|Longhorn|ubuntu|AIX|Linux|AmigaOS|BEOS|HP-UX|OpenBSD|FreeBSD|NetBSD|OS/2|OSF1|SUN";
                string uAgent = HttpContext.Current.Request.ServerVariables["HTTP_USER_AGENT"];
                if (uAgent == null)
                    return flg;
                Regex reg = new Regex(osPat);
                if (reg.IsMatch(uAgent))
                {
                    flg = 0;
                }
                else
                {
                    flg = 1;
                }
                return flg;
            }

        }

}
